package com.atguigu.ggkt.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期操作工具类
 *
 */
public class DateUtil {

    private static final String dateFormat = "yyyy-MM-dd";
    private static final String dateFormatFull = "yyyyMMddHHmmssSSS";
    private static final String timeFormat = "HH:mm:ss";

    public static Date parseIsoDateTime(String isoDateTime) {
        // ISO 8601 格式的日期时间字符串
//        String isoDateTime = "2018-06-08T10:34:56+08:00";

        // 使用 DateTimeFormatter 解析字符串
        DateTimeFormatter formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(isoDateTime, formatter);

        // 将 ZonedDateTime 转换为 java.util.Date
        Instant instant = zonedDateTime.toInstant();
        Date date = Date.from(instant);

        // 打印结果
//        System.out.println("java.util.Date: " + date);
        return date;
    }

    public static Date now(){
        LocalDateTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
        ZonedDateTime zdt = localDateTime.atZone(zoneId);
        Date date = Date.from(zdt.toInstant());
        return date;
    }

    /**
     * 格式化日期
     *
     * @param date
     * @return
     */
    public static String formatDate(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        return sdf.format(date);
    }

    /**
     * @author Tony Xi
     * @since 20240817
     */
    public static String localDateNowString() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormatFull);
        String formattedDate = LocalDateTime.now().format(formatter); // 格式化日期为字符串
        return formattedDate;
    }

    /**
     * 格式化日期
     *
     * @param date
     * @return
     */
    public static String formatTime(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        return sdf.format(date);

    }

    public static Date parseTime(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 截取比较断两个日期对象的field处的值 。
     * 如果第一个日期小于、等于、大于第二个，则对应返回负整数、0、正整数
     *
     * @param date1 第一个日期对象，非null
     * @param date2 第二个日期对象，非null
     * @param field Calendar中的阈值
     *              <p>
     *              date1 > date2  返回：1
     *              date1 = date2  返回：0
     *              date1 < date2  返回：-1
     */
//    public static int truncatedCompareTo(final Date date1, final Date date2, final int field) {
//        return DateUtils.truncatedCompareTo(date1, date2, field);
//    }

    /**
     * 比对日期与时间大小
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static boolean dateCompare(Date beginDate, Date endDate) {
        if(null == beginDate || null == endDate) return false;
        // endDate > beginDate
        if (endDate.getTime() > beginDate.getTime()) {
            return true;
        }
        return false;
    }

    /**
     * 比对日期与时间大小
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    public static boolean timeCompare(Date beginDate, Date endDate) {
        Calendar instance1 = Calendar.getInstance();
        instance1.setTime(beginDate); //设置时间为当前时间
        instance1.set(Calendar.YEAR, 0);
        instance1.set(Calendar.MONTH, 0);
        instance1.set(Calendar.DAY_OF_MONTH, 0);

        Calendar instance2 = Calendar.getInstance();
        instance2.setTime(endDate); //设置时间为当前时间
        instance2.set(Calendar.YEAR, 0);
        instance2.set(Calendar.MONTH, 0);
        instance2.set(Calendar.DAY_OF_MONTH, 0);
        // endDate > beginDate
//        if (DateUtil.truncatedCompareTo(instance1.getTime(), instance2.getTime(), Calendar.SECOND) == 1) {
//            return false;
//        }
        return true;
    }

    public static void main(String[] args) {
        String now = DateUtil.localDateNowString();
        System.out.println(now);
        System.out.println(now.length());
    }

}
